package com.flag.app;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
    

interface GeneircInteface<T> {     
    String geneircIntefaceField="fd";
    
    T method1(T obj);     
}     
    
interface CommonInteface<R> {     
	String commonIntefaceField="fdfd";
	
    R method2(R obj);     
}

public class GenericClass  extends BaseGeneircInteface<List<String>> implements GeneircInteface<List<String>>, CommonInteface<Integer>{     
	String genericClassField="fdfdsfd";
	public String genericPublicField="fdfdsfd";
	
    @Override    
    public List<String> method1(List<String> obj) {     
//        result = obj;     
        return null;     
    }   
    
    @Override 
    public Integer method2(Integer obj) {     
        return obj;     
    }     
    
    public <G> G method3(G obj){     
        return obj;     
    }     
    
    public static void main(String[] args) {
    	GenericClass genericClass = new GenericClass();
//    	System.err.println("-------------------getFields : all public-----------------");
//    	for(Field field : genericClass.getClass().getFields()){
//    		System.err.println(field.getClass() +" : "+field.getName());
//    	}
//    	
//    	System.err.println("----------------getDeclaredFields : Declared -----------------");
//    	for(Field field : genericClass.getClass().getDeclaredFields()){
//    		System.err.println(field.getClass() +" : "+field.getName());
//    	}
//    	
//    	System.err.println("----------------getMethods :  all public- -----------------");
//    	for(Method m : genericClass.getClass().getMethods()){
//    		System.err.println(m.getDeclaringClass()+"--"+m.getClass() +" : "+m.getName());
//    	}
    	
    	System.err.println("----------------getDeclaredMethods :  Declared -----------------");
    	for(Method m : genericClass.getClass().getDeclaredMethods()){
    		System.err.println(m.getDeclaringClass()+"--"+m.getClass() +" : "+m.getName()+" : "+m.getReturnType());
    	}
	}
}    